﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using MySql.Data.MySqlClient;
using System.Web.Configuration;
using System.Web.UI.WebControls;
using System.Data.OleDb;
/// <summary>
/// Classe com funções basicas do banco de dados(alteração, exclusão, busca ...)
/// </summary>
public class Banco
{
    public string Conexao = WebConfigurationManager.ConnectionStrings["Compras"].ConnectionString;

    public Banco()
    {
        //
        // 
        //      
    }
    /// <summary>Metodo para executar qualquer comando SQL</summary>
    /// <param name="sql">Instrução SQL</param>
    /// <returns>true para comando OK, false para algum erro no SQL, ou Banco</returns>
    public bool Comando(string sql)
    {
        MySqlConnection connection = new MySqlConnection(Conexao);
        MySqlCommand comando = new MySqlCommand(sql, connection);
        bool resultado = true;
        try
        {
            connection.Open();
            comando.ExecuteNonQuery();
            //transação OK
        }
        catch (MySqlException)
        {
            resultado = false;
            //transação falha
        }
        connection.Close();
        return resultado;
    }
    /// <summary> metodo que popula um dropdownlist de acordo com uma tabela no banco </summary>
    /// <param name="ddl">Nome da DropDownList a ser populada</param>
    /// <param name="sql">Instrução SQL para popular, primeiro o codigo depois o valor que ficará visivel na DropDownList</param>
    public bool popularddl(DropDownList ddl, string sql)
    {
        bool resultado;

        MySqlConnection conection = new MySqlConnection(Conexao);
        try
        {
            MySqlCommand comando = new MySqlCommand(sql, conection);

            MySqlDataReader dtreader;
            conection.Open();
            dtreader = comando.ExecuteReader();

            string a, b;

            if (dtreader.HasRows)
            {
                while (dtreader.Read())
                {
                    a = dtreader.GetString(1);
                    b = Convert.ToString(dtreader.GetInt32(0));

                    ddl.Items.Add(new ListItem { Text = a, Value = b });
                }
            }
            resultado = true;
        }
        catch
        {
            resultado = false;
        }
        conection.Close();
        return resultado;
    }
    /// <summary>Faz uma consulta no Banco para retornar um DataTable</summary>
    /// <param name="sql">Instrução SQL</param>
    /// <returns>DataTable para usar em uma GridView, DetailsView ...</returns>
    public DataTable BuscaBanco(string sql)
    {
        MySqlConnection conn = new MySqlConnection(Conexao);
        MySqlCommand cmd = new MySqlCommand();
        cmd.CommandText = sql;
        cmd.Connection = conn;

        DataTable dt = new DataTable();
        MySqlDataAdapter da = new MySqlDataAdapter(cmd);
        da.Fill(dt);

        return dt;
    }
    /// <summary>
    /// Verifica se a consulta retorna algo ou não(tabela vazia ou cheia).
    /// </summary>
    /// <param name="sql">Consulta sql.</param>
    /// <returns>True para tabela cheia, false para vazia.</returns>
    public bool VerificaTabela(string sql)
    {
        bool existe;

        MySqlConnection conection = new MySqlConnection(Conexao);
        MySqlCommand comando = new MySqlCommand(sql, conection);

        MySqlDataReader dtreader;
        conection.Open();
        dtreader = comando.ExecuteReader();

        if (dtreader.HasRows)
            existe = true;        
        else
            existe = false;

        conection.Close();

        return existe;
    }
    /// <summary>Verifica se ja existe alguma valor de acordo com a consulta</summary>
    /// <param name="sql">Instrução SQL somente com o campo a ser verificado</param>
    /// <param name="valor">Valor a ser verificado</param>
    /// <returns>true se existir e false se não existir</returns>
    public bool VerificaExiste(string sql, string valor)
    {
        string teste;
        bool existe;

        existe = false;

        MySqlConnection conection = new MySqlConnection(Conexao);
        MySqlCommand comando = new MySqlCommand(sql, conection);

        MySqlDataReader dtreader;
        conection.Open();
        dtreader = comando.ExecuteReader();

        if (dtreader.HasRows)
        {
            while (dtreader.Read())
            {
                teste = Convert.ToString(dtreader.GetValue(0));

                if (teste == valor)
                {
                    existe = true;
                }
            }
        }
        conection.Close();
        return existe;
    }
    /// <summary>
    /// Verifica o ultimo codigo de uma tabela
    /// </summary>
    /// <param name="sql">Comando SQL por ex. "SELECT codigo FROM anexos ORDER BY codigo DESC LIMIT 1"</param>
    /// <returns>Retorna o ultimo codigo</returns>
    public int UltimoCodigo(string sql)
    {
        MySqlConnection conection = new MySqlConnection(Conexao);
        MySqlCommand comando = new MySqlCommand(sql, conection);

        MySqlDataReader dtreader;
        conection.Open();
        dtreader = comando.ExecuteReader();

        int UltimoCodigo = 1;

        if (dtreader.HasRows)
        {
            while (dtreader.Read())
            {

                UltimoCodigo = dtreader.GetInt32(0);
            }
        }
        conection.Close();
        return UltimoCodigo;
    }
    /// <summary>
    /// Retorna uma única variável.
    /// </summary>
    /// <param name="sql">Select para essa variável.</param>
    /// <returns>Variável.</returns>
    public string BuscarString(string sql)
    {
        MySqlConnection conection = new MySqlConnection(Conexao);
        MySqlCommand comando = new MySqlCommand(sql, conection);

        MySqlDataReader dtreader;
        conection.Open();
        dtreader = comando.ExecuteReader();

        string Variavel = "";

        if (dtreader.HasRows)
        {
            while (dtreader.Read())
            {

                Variavel = dtreader.GetValue(0).ToString();
            }
        }
        conection.Close();
        return Variavel;
    }
}